package reflect;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * java的反射机制
 * 反射是Java的动态机制，允许程序在[运行期间]再确定如对象的实例化、属性操作、方法调用等
 * 可以体高代码的灵活性、扩展性、维护性
 * 但是于晓娜效率相对降低同时开销增多
 * 需要湿度使用
 */
public class ReflectDemo1 {
    public static void main(String[] args) throws ClassNotFoundException {

        //通过class获取类对象
        /*
        Class cls = String.class;
        Class cls2 = int.class;
        Class cls3 = ArrayList.class;
        */

        //通过指定类的完全限定名获取一个类的类对象
        /*
        Class cls4 = Class.forName("java.lang.String");
        Class cls5 = Class.forName("java.util.ArrayList");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个类名");
        String name = scan.nextLine();
        Class cls6 = Class.forName(name);
         */
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个类名");
        String name = scan.nextLine();
        Class cls =  Class.forName(name);

        System.out.println("获取类的完全限定名："+cls.getName());
        System.out.println("获取类名："+cls.getSimpleName());
        Package pkg = cls.getPackage();
        System.out.println("获取包名："+pkg.getName());
        /*
        Method是反射对象之一，它的每个实例用于表示一个类的方法
         */
        Method[]methods = cls.getMethods();//获取所有方法
        for (Method method :methods){
            System.out.println(method.getName());//获取方法名
        }















    }
}
